//package com.pb.infra.oth.util;
//
//import com.bstek.ureport.Utils;
//import com.bstek.ureport.chart.ChartData;
//import com.bstek.ureport.export.ExportManager;
//import com.bstek.ureport.export.html.HtmlReport;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.core.env.Environment;
//import org.springframework.lang.Nullable;
//import org.springframework.stereotype.Service;
//
//import javax.servlet.http.HttpServletRequest;
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.*;
//
///**
// * Ureport工具类
// *
// * @Author:chenjian
// * @Date: 2019/8/1
// * @Time: 00:00
// */
//@Slf4j
//@Service
//public class UreportUtils {
//    @Autowired
//    private RedisUtil redisUtil;
//    /**
//     * 前缀
//     */
//    private static final String PREFIX = "file:";
//
//    /**
//     * 后缀
//     */
//    private static final String SUFFIX = ".ureport.xml";
//
//    /**
//     * SPRING环境对象
//     */
//    @Autowired
//    private Environment env;
//
//    /**
//     * 获取报表
//     *
//     * @param request     请求对象
//     * @param reportName  报表名称
//     * @param params      参数
//     * @param method      controller方法
//     * @param resetScript 重置脚本
//     * @param comboTree   下拉树
//     * @param multiSelect 多选下拉框
//     * @return String     报表HTML文档
//     */
//    @Nullable
//    public String getReportHtml(HttpServletRequest request, String reportName, Map<String, Object> params, String method, String resetScript, String[][] comboTree, String[][] multiSelect,String positionId,String token) {
//        try {
//            ExportManager exportManager = (ExportManager) Utils.getApplicationContext().getBean(ExportManager.BEAN_ID);
//            HtmlReport htmlReport = exportManager.exportHtml(PREFIX + reportName + SUFFIX, request.getContextPath(), params);
//            StringBuilder paramStr = new StringBuilder();
//            for (Map.Entry<String, Object> entry : params.entrySet()) {
//                String paramKey=entry.getKey()+"";
//                if (entry.getKey() != null && entry.getValue() != null&&!paramKey.contains("sqlStr")) {
//                    paramStr.append("&" + entry.getKey() + "=" + entry.getValue().toString());
//                }
//            }
//            StringBuilder html = new StringBuilder();
//            html.append("<!doctype html>");
//            html.append("<html>");
//            html.append("<head>");
//            html.append("<meta charset=\"UTF-8\">");
//            html.append("<link rel=\"stylesheet\" type=\"text/css\" href=\"" + env.getProperty("reportPathPrefix") + "/ureport/res/ureport-asserts/css/bootstrap.min.css\">");
//            html.append("<meta name=\"renderer\" content=\"webkit\">");
//            html.append("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\">");
//            html.append("<meta http-equiv=\"Cache-Control\" content=\"no-siteapp\">");
//            html.append("<meta name=\"viewport\" content=\"initial-scale=1, maximum-scale=3, minimum-scale=1, user-scalable=no\">");
//            html.append("<title>" + reportName + "</title>");
//            html.append("<style type=\"text/css\" id=\"_ureport_table_style\">");
//            html.append(htmlReport.getStyle());
//            html.append("</style>");
//            html.append("<script type=\"text/javascript\" src=\"" + env.getProperty("reportPathPrefix") + "/ureport/res/ureport-asserts/venderjs/jquery.min.js\"></script>");
//            html.append("<script type=\"text/javascript\" src=\"" + env.getProperty("reportPathPrefix") + "/ureport/res/ureport-asserts/venderjs/bootstrap.min.js\"></script>");
//            html.append("<script type=\"text/javascript\" src=\"" + env.getProperty("reportPathPrefix") + "/ureport/res/ureport-asserts/venderjs/Chart.bundle.min.js\"></script>");
//            html.append("<script type=\"text/javascript\" src=\"" + env.getProperty("reportPathPrefix") + "/ureport/res/ureport-asserts/venderjs/chartjs-plugin-datalabels.min.js\"></script>");
//            html.append("<script type=\"text/javascript\" src=\"" + env.getProperty("reportPathPrefix") + "/ureport/res/ureport-asserts/venderjs/bootstrap-datetimepicker.js\"></script>");
//            html.append("<script type=\"text/javascript\" src=\"" + env.getProperty("reportPathPrefix") + "/ureport/res/ureport-asserts/js/preview.bundle.js\"></script>");
//            html.append("<link rel=\"stylesheet\" type=\"text/css\" href=\"../ureport2/bootstrap-treeview.min.css\">");
//            html.append("<script type=\"text/javascript\" src=\"../ureport2/bootstrap-treeview.min.js\"></script>");
//            html.append("<link rel=\"stylesheet\" type=\"text/css\" href=\"../ureport2/bootstrap-select.min.css\">");
//            html.append("<script type=\"text/javascript\" src=\"../ureport2/bootstrap-select.min.js\"></script>");
//            html.append("<style type=text/css>");
//            html.append(".list-group-item{padding:5px;border:none;white-space:nowrap;}");
//            html.append(".list-group,ul{margin-bottom:0;}");
//            html.append(".treeview{border:1px solid #ddd;overflow:auto;max-height:300px;background-color:#FFF;}");
//            html.append("#_ureport_table table td{white-space:nowrap;}");
//            html.append(".col-md-1{width:130px;}");
//            html.append(".col-md-12{width:100%;}");
//            html.append("form{padding-left:20px;}");
//            html.append(".form-control{color:#333;}");
//            if (multiSelect != null && multiSelect.length > 0) {
//                html.append(".bootstrap-select,.dropdown-toggle{height:28px;}");
//                html.append(".bootstrap-select .btn{padding:0 0 0 5px;}");
//                html.append(".btn-default,.btn-default:focus,.btn-default:hover,.btn-default.active,.btn-default.active.focus,.btn-default.active:hover,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:hover{background-color:#ffffff;}");
//                html.append(".btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{background-color:#ffffff;}");
//            }
//            html.append("</style>");
//            html.append("</head>");
//            html.append("<body style=\"padding:10px\">");
//            html.append("<div style=\"width:100%;padding-left:20px;\">");
//            html.append("<button type=\"button\" class=\"btn btn-default page-back\" style=\"display:inline-block;padding:0;border:none;margin:3px\" title=\"返回\">");
//            html.append("<img src=\"" + env.getProperty("reportPathPrefix") + "/ureport/res/ureport-asserts/icons/prev.svg\" width=\"25px\" height=\"25px\"></button>");
//            html.append("<button type=\"button\" class=\"btn btn-default export-excel\" style=\"display:inline-block;padding:0;border:none;margin:3px\" title=\"导出EXCEL\">");
//            html.append("<img src=\"" + env.getProperty("reportPathPrefix") + "/ureport/res/ureport-asserts/icons/excel.svg\" width=\"25px\" height=\"25px\"></button>");
//            html.append("</div>");
//            if (htmlReport.getSearchFormData() != null) {
//                html.append(htmlReport.getSearchFormData().getHtml());
//            }
//            html.append("<div id=\"_ureport_table\">");
//            html.append(htmlReport.getContent());
//            html.append("</div>");
//            html.append("<script type=\"text/javascript\">");
//            html.append("if(window.location.href.indexOf('?')==-1&&window.location.href.indexOf('=')==-1){$('.page-back').hide();}");
//            html.append("else{$('.page-back').show();}");
//            html.append("window._server='" + env.getProperty("reportPathPrefix") + "/ureport';");
//            html.append("window.formElements=[];");
//            html.append("$(document).ready(function(){");
//            //  html.append("buildPaging(0,0);");
//            if (htmlReport.getChartDatas().size() > 0) {//处理图表内容
//                html.append("_buildChartDatas([");
//                Collection<ChartData> chartDatas = htmlReport.getChartDatas();
//                int i = 0;
//                for (ChartData chartData : chartDatas) {
//                    if (i > 0) {
//                        html.append(",");
//                    }
//                    html.append("{\"id\":\"" + chartData.getId() + "\",\"json\":\"" + chartData.getJson().replaceAll("}\"plugins\"", "},\"plugins\"").replaceAll("\"", "\\\\\"") + "\"}");
//                    i++;
//                }
//                html.append("]);");
//            }
//            if (htmlReport.getSearchFormData() != null && !"".equals(htmlReport.getSearchFormData().getJs().trim())) {
//                if (comboTree != null && comboTree.length > 0) {
//                    //构造下拉树控件
//                    html.append("function addComboTree(type,label){");
//                    html.append("var colMd1Div=document.createElement('div');");
//                    html.append("colMd1Div.setAttribute('class','col-md-1');");
//                    html.append("colMd1Div.setAttribute('style','padding-left:2px;padding-right:2px;width:250px;');");
//                    html.append("var nullDiv=document.createElement('div');");
//                    html.append("colMd1Div.appendChild(nullDiv);");
//                    html.append("var formGroupDiv=document.createElement('div');");
//                    html.append("formGroupDiv.setAttribute('class','form-group');");
//                    html.append("formGroupDiv.setAttribute('style','margin:-3px 0px 10px 0px;');");
//                    html.append("nullDiv.appendChild(formGroupDiv);");
//                    html.append("var span=document.createElement('span');");
//                    html.append("span.setAttribute('style','font-size:13px;');");
//                    html.append("span.innerText=label+'：';");
//                    html.append("formGroupDiv.appendChild(span);");
//                    html.append("var idInput=document.createElement('input');");
//                    html.append("idInput.setAttribute('type','text');");
//                    html.append("idInput.setAttribute('style','display:none;');");
//                    html.append("idInput.setAttribute('name',type+'Id');");
//                    html.append("formGroupDiv.appendChild(idInput);");
//                    html.append("var nameInput=document.createElement('input');");
//                    html.append("nameInput.setAttribute('type','text');");
//                    html.append("nameInput.setAttribute('style','padding:3px;height:28px; width:70%;font-size: 14px;background-color: #fff;background-image: none;border: 1px solid #ccc;border-radius: 4px;box-shadow: inset 0 1px 1px rgba(0,0,0,.075);transition: border-color ease-in-out .15s,box-shadow ease-in-out .15s;');");
//                    html.append("nameInput.setAttribute('name',type+'Name');");
//                    //html.append("nameInput.setAttribute('class','form-control');");
//                    html.append("nameInput.setAttribute('autocomplete','off');");
//                    html.append("formGroupDiv.appendChild(nameInput);");
//                    html.append("var treeDiv=document.createElement('div');");
//                    html.append("treeDiv.setAttribute('id',type+'Tree');");
//                    html.append("treeDiv.setAttribute('style','display:none;position:absolute;width:300px;');");
//                    html.append("formGroupDiv.appendChild(treeDiv);");
//                    html.append("if(document.getElementsByTagName('form')[0].children[0].children.length==0){");
//                    html.append("document.getElementsByTagName('form')[0].children[0].appendChild(colMd1Div);");
//                    html.append("}else{");
//                    html.append("document.getElementsByTagName('form')[0].children[0].insertBefore(colMd1Div,document.getElementsByTagName('form')[0].children[0].children[0]);");
//                    html.append("}");
//                    html.append("}");
//                    for (int i = comboTree.length - 1; i >= 0; i--) {
//                        html.append("addComboTree('" + comboTree[i][0] + "','" + comboTree[i][1] + "');");
//                        html.append("$(\"input[name='" + comboTree[i][0] + "Id']\").val('" + (params.get(comboTree[i][0] + "Id") == null ? "" : params.get(comboTree[i][0] + "Id").toString()) + "');");
//                        html.append("$(\"input[name='" + comboTree[i][0] + "Name']\").val('" + (params.get(comboTree[i][0] + "Name") == null ? "" : params.get(comboTree[i][0] + "Name").toString()) + "');");
//                        if (comboTree[i][2] != null && !"".equals(comboTree[i][2])) {
//                            //获取下拉树节点
//                            html.append("function " + comboTree[i][2] + "(name,isSearch){");
//                            html.append("$.ajax({");
//                            html.append("type:'post',");
//                            html.append("url:'" + env.getProperty("reportPathPrefix") + "/ureport2/" + comboTree[i][2] + "',");
//                            html.append("data:{name:name},");
//                            html.append("success:function(data,status){");
//                            html.append("console.info(data);var options={");
//                            html.append("levels:1,");
//                            html.append("data:data.message,");
//                            html.append("expandIcon:'glyphicon glyphicon-chevron-right',");
//                            html.append("collapseIcon:'glyphicon glyphicon-chevron-down',");
//                            html.append("onNodeSelected:function(event,node){");
//                            html.append("$(\"input[name='" + comboTree[i][0] + "Id']\").val(node.id);");
//                            html.append("$(\"input[name='" + comboTree[i][0] + "Name']\").val(node.text);");
//                            html.append("$('#" + comboTree[i][0] + "Tree').hide();");
//                            html.append("}");
//                            html.append("};");
//                            html.append("$('#" + comboTree[i][0] + "Tree').treeview(options);");
//                            html.append("if(isSearch){");
//                            html.append("$('#" + comboTree[i][0] + "Tree').treeview('clearSearch');");//清除搜索结果
//                            html.append("$('#" + comboTree[i][0] + "Tree').treeview('expandAll');");
//                            html.append("$('#" + comboTree[i][0] + "Tree').treeview('search',[$(\"input[name='" + comboTree[i][0] + "Name']\").val(),{ignoreCase:true,exactMatch:false}]);");//模糊查询并高亮显示
//                            html.append("}");
//                            html.append("}");
//                            html.append("});");
//                            html.append("}");
//                            html.append(comboTree[i][2] + "('',false);");
//                            html.append("$(\"input[name='" + comboTree[i][0] + "Name']\").click(function() {");
//                            html.append("if($('#" + comboTree[i][0] + "Tree').css('display')=='none'){");
//                            html.append("$('#" + comboTree[i][0] + "Tree').show();");
//                            html.append("}");
//                            html.append("});");
//                            //下拉树控件添加回车事件
//                            html.append("$(\"input[name='" + comboTree[i][0] + "Name']\").keyup(function(event){");
//                            html.append("if(event.keyCode ==13){");
//                            html.append(comboTree[i][2] + "($(\"input[name='" + comboTree[i][0] + "Name']\").val(),true);");
//                            html.append("if($('#" + comboTree[i][0] + "Tree').css('display')=='none'){");
//                            html.append("$('#" + comboTree[i][0] + "Tree').show();");
//                            html.append("}");
//                            html.append("}});");
//                        }
//                    }
//                    html.append("$(window).click(function(event){");
//                    for (int i = comboTree.length - 1; i >= 0; i--) {
//                        html.append("if(!(event.target.name=='" + comboTree[i][0] + "Name' || event.target.id=='" + comboTree[i][0] + "Tree') && event.target.tagName!='SPAN'){$('#" + comboTree[i][0] + "Tree').hide();}");
//                    }
//                    html.append("});");
//                }
//                if (multiSelect != null && multiSelect.length > 0) {
//                    //构造多选下拉框控件
//                    html.append("function addMultiSelect(name,label){");
//                    html.append("var colMd1Div=document.createElement('div');");
//                    html.append("colMd1Div.setAttribute('class','col-md-1');");
//                    html.append("colMd1Div.setAttribute('style','padding-left:2px;padding-right:2px;width:250px;');");
//                    html.append("var nullDiv=document.createElement('div');");
//                    html.append("colMd1Div.appendChild(nullDiv);");
//                    html.append("var formGroupDiv=document.createElement('div');");
//                    html.append("formGroupDiv.setAttribute('class','form-group');");
//                    html.append("formGroupDiv.setAttribute('style','padding-top:5em;margin:0px 0px 10px 0px;');");
//                    html.append("nullDiv.appendChild(formGroupDiv);");
//                    html.append("var span=document.createElement('span');");
//                    html.append("span.setAttribute('style','font-size:13px;');");
//                    html.append("span.innerText=label+'：';");
//                    html.append("formGroupDiv.appendChild(span);");
//                    html.append("var select=document.createElement('select');");
//                    html.append("select.setAttribute('style','padding:3px;height:28px;');");
//                    html.append("select.setAttribute('name',name);");
//                    html.append("select.setAttribute('multiple','');");//设置允许多选
//                    html.append("select.setAttribute('data-actions-box','true');");//显示全选和全不选
//                    html.append("formGroupDiv.appendChild(select);");
//                    html.append("var idInput=document.createElement('input');");
//                    html.append("idInput.setAttribute('type','text');");
//                    html.append("idInput.setAttribute('style','display:none;');");
//                    html.append("idInput.setAttribute('name',name+'Id');");
//                    html.append("formGroupDiv.appendChild(idInput);");
//                    html.append("document.getElementsByTagName('form')[0].children[0].insertBefore(colMd1Div,document.getElementsByTagName('form')[0].children[0].children[document.getElementsByTagName('form')[0].children[0].children.length-2]);");
//                    html.append("}");
//                    for (int i = multiSelect.length - 1; i >= 0; i--) {
//                        html.append("addMultiSelect('" + multiSelect[i][0] + "','" + multiSelect[i][1] + "');");
//                        html.append("$(\"select[name='" + multiSelect[i][0] + "']\").empty();");//清空下拉框选项
//                        if (!"".equals(multiSelect[i][2])) {
//                            String[] options = multiSelect[i][2].split("#");
//                            for (int j = 0; j < options.length; j++) {
//                                html.append("$(\"select[name='" + multiSelect[i][0] + "']\").append(\"<option value='" + options[j].split("@")[0] + "'>" + options[j].split("@")[1] + "</option>\");");//添加下拉框选项
//                            }
//                        }
//                        html.append("$(\"select[name='" + multiSelect[i][0] + "']\").selectpicker({'noneSelectedText':'','selectAllText': '全选','deselectAllText':'全不选'});");
//                        html.append("$(\"select[name='" + multiSelect[i][0] + "']\").seletpicker('val',[\"" + params.get(multiSelect[i][0] + "Id").toString().replaceAll("','", "\",\"") + "\"]);");
////                        html.append("$(\"select[name='" + multiSelect[i][0] + "']\").selectpicker('val',[" + params.get(multiSelect[i][0] + "Id") + "]);");
//                        html.append("$(\"select[name='" + multiSelect[i][0] + "']\").on('changed.bs.select',function(e,clickedIndex,isSelected,previousValue){");
//                        html.append("if(clickedIndex==null){");
//                        html.append("var selectVal=$(\"select[name='" + multiSelect[i][0] + "']\").selectpicker('val');");
//                        html.append("if(selectVal.length>10){");
//                        html.append("$(\"select[name='" + multiSelect[i][0] + "']\").selectpicker('val',selectVal.slice(0,10));");
//                        html.append("$(\"select[name='" + multiSelect[i][0] + "']\").selectpicker('refresh');");
//                        html.append("}}});");
//                    }
//                }
//                html.append(htmlReport.getSearchFormData().getJs());
//                //查询
//                html.append("function doSearch(){");
//                html.append("document.getElementsByTagName('form')[0].action=\"" + env.getProperty("reportPathPrefix") + "/ureport2/" + method + "\";");
//                html.append("document.getElementsByTagName('form')[0].method=\"post\";");
//                if (multiSelect != null && multiSelect.length > 0) {
//                    for (int i = multiSelect.length - 1; i >= 0; i--) {
//                        html.append("$(\"input[name='" + multiSelect[i][0] + "Id']\").val('\"'+$(\"select[name='" + multiSelect[i][0] + "']\").selectpicker('val').join('\",\"')+'\"');");
//                    }
//                }
//                html.append("document.getElementsByTagName('form')[0].submit();");
//                html.append("}");
//                //重置
//                html.append("$(\"button[type='reset']\").click(function(){");
//                if (resetScript != null) {
//                    html.append(resetScript);
//                }
//                html.append("doSearch();");
//                html.append("});");
//            }
//            //返回
//            html.append("$('.page-back').click(function(){");
//            html.append("window.history.back();");
//            html.append("});");
//            //导出
//            html.append("$('.export-excel').click(function(){");
//          /*  $.post("test.php", { name: "John", time: "2pm" },
//            function(data){
//                alert("Data Loaded: " + data);
//            });*/
//            html.append("window.open(window._server+'/excel?_u=" + PREFIX + reportName + SUFFIX + paramStr.toString() + "','_parent');");
//            html.append("});");
//            html.append("$('input').each(function(){$(this).attr('autocomplete','off');});");//去除文本框自动填充
//            //根据不同的对齐方式设置左右间距
//            html.append("$('td').each(function(){");
//            html.append("if($(this).css('text-align')=='left'){$(this).css('padding-right','20px');}");
//            html.append("else if($(this).css('text-align')=='center'){$(this).css('padding-left','10px');$(this).css('padding-right','10px');}");
//            html.append("else if($(this).css('text-align')=='right'){$(this).css('padding-left','20px');$(this).css('padding-right','10px');}");
//            html.append("});");
//            //斑马线
//            html.append("$('tr:odd').css('background-color','#FFFFFF');");//奇数行背景色
//            html.append("$('tr:even').css('background-color','#F9F9F9');");//偶数行背景色
//            //查询重置按钮的位置
//            html.append("$('.col-md-6').css('padding-top','16px');");
//            //设置超链接的样式
//            html.append("$('a').each(function(){");
//            html.append("if($(this).parents('td').css('color') == 'rgb(255, 255, 255)'){$(this).css('color','#FFFFFF');$(this).css('text-decoration','underline');}");//标题行的超链接样式
//            html.append("else{$(this).css('text-decoration','underline');}");//数据行的超链接样式
//            html.append("});");
//            html.append("});");
//            html.append("document.getElementsByTagName('form')[0].innerHTML+=\"<input type=\'hidden\' value=\'"+positionId+"\' style=\'padding:3px;height:28px\' id=\'positionId\'  name=\'positionId\'/>\";");
//            html.append("document.getElementsByTagName('form')[0].innerHTML+=\"<input type=\'hidden\' value=\'"+token+"\' style=\'padding:3px;height:28px\' id=\'token\'  name=\'token\'/>\";");
//            // html.append("document.getElementsByTagName('form')[0].childNodes[0].childNodes[1].style.margin=\'0% 45% 0% 0%\';");
//            // html.append("console.info(document.getElementsByTagName('form')[0].childNodes[0]);");
//
//            html.append(redisUtil.get("cssStyle"));
//            html.append("</script>");
//            html.append("</body>");
//            html.append("</html>");
//            return html.toString();
//        } catch (Exception e) {
//            e.printStackTrace();
//            log.error("加载报表 {} 失败，失败原因：{}", reportName, e.getMessage(), e);
//            return "加载失败，失败原因：" + e;
//        }
//    }
//
//
//    /**
//     * 构造树形结构
//     *
//     * @param startNodeId 起始节点号
//     * @param dataList    节点集合
//     * @return List<Map < String, Object>> 树形结构数据
//     */
//    public static List<Map<String, Object>> createTree(String startNodeId, List<Map<String, Object>> dataList) {
//        List<Map<String, Object>> nodeList = new ArrayList<>();
//        createChildren(startNodeId, dataList, nodeList);
//        return nodeList;
//    }
//
//    /**
//     * 构造子节点
//     *
//     * @param parentNodeId 父节点号
//     * @param dataList     节点集合
//     * @param childList    子节点集合
//     */
//    public static void createChildren(String parentNodeId, List<Map<String, Object>> dataList, List<Map<String, Object>> childList) {
//        for (Map<String, Object> data : dataList) {
//            if ((StringUtil.isEmpty(parentNodeId) && StringUtil.isEmpty(data.get("parentId"))) || (data.get("parentId") != null && data.get("parentId").toString().trim().equals(parentNodeId))) {
//                Map<String, Object> childNodeMap = new HashMap<>();
//                childNodeMap.put("id", data.get("id").toString().trim());
//                childNodeMap.put("text", data.get("name").toString().trim());
//                List<Map<String, Object>> childrenListIn = new ArrayList<>();
//                childNodeMap.put("nodes", childrenListIn);
//                childList.add(childNodeMap);
//                createChildren(data.get("id").toString().trim(), dataList, childrenListIn);
//            }
//        }
//    }
//
//    /**
//     * 将Date类型格式化成String
//     *
//     * @param date   日期
//     * @param format 格式化类型
//     * @return String 格式化字符串结果
//     */
//    public static String formatDate2String(Date date, String format) {
//        return new SimpleDateFormat(format).format(date);
//    }
//
//    /**
//     * 将String类型格式化成Date
//     *
//     * @param date   日期
//     * @param format 格式化类型
//     * @return Date  格式化日期类型结果
//     */
//    public static Date formatString2Date(String date, String format) {
//        try {
//            return new SimpleDateFormat(format).parse(date);
//        } catch (ParseException e) {
//            log.error("日期格式化失败，失败原因：{}", e.getMessage(), e);
//        }
//        return null;
//    }
//
//    /**
//     * 获取环比上期日期
//     *
//     * @param freq     频度
//     * @param thisDate 当期日期
//     * @return String  环比上期日期
//     */
//    public static String getLastDate(String freq, String thisDate) {
//        if (StringUtil.isEmpty(freq) || StringUtil.isEmpty(thisDate)) {
//            return "";
//        }
//        Calendar calendar = Calendar.getInstance();
//        calendar.clear();
//        if (thisDate.length() == 8) {
//            calendar.setTime(formatString2Date(thisDate, Constant.DATE_FORMAT_8));
//        } else if (thisDate.length() == 10) {
//            calendar.setTime(formatString2Date(thisDate, Constant.DATE_FORMAT_10));
//        }
//        if ("D".equals(freq)) {//上日
//            calendar.add(Calendar.DATE, -1);
//        } else if ("M".equals(freq)) {//上月末
//            calendar.set(Calendar.DAY_OF_MONTH, 1);
//            calendar.add(Calendar.DATE, -1);
//        } else if ("Q".equals(freq)) {//上季末
//            int month = Integer.parseInt(thisDate.replaceAll("-", "").substring(4, 6));
//            calendar.set(Calendar.MONTH, (month - 1) / 3 * 3);
//            calendar.set(Calendar.DATE, 1);
//            calendar.add(Calendar.DATE, -1);
//        } else if ("Y".equals(freq)) {//上年末
//            calendar.set(Calendar.MONTH, 0);
//            calendar.set(Calendar.DATE, 1);
//            calendar.add(Calendar.DATE, -1);
//        } else if ("LY".equals(freq)) {//上年同期
//            if ("0229".equals(thisDate.replaceAll("-", "").substring(4, 8))) {
//                calendar.set(Calendar.YEAR, calendar.getWeekYear() - 1);
//                calendar.set(Calendar.MONTH, 1);
//                calendar.set(Calendar.DATE, 28);
//            } else {
//                calendar.set(Calendar.YEAR, calendar.getWeekYear() - 1);
//            }
//        }
//        return formatDate2String(calendar.getTime(), Constant.DATE_FORMAT_10);
//    }
//
//    /**
//     * 根据频度获取当前天数
//     *
//     * @param freq 频度
//     * @param date 日期
//     * @return int 天数
//     */
//    public static int getCurrentFreqDays(String freq, String date) {
//        if (freq == null || "".equals(freq) || date == null || "".equals(date)) {
//            return 1;
//        }
//        if (date.length() == 10 && date.indexOf('-') > -1) {
//            date = date.replaceAll("-", "");
//        }
//        int year = Integer.parseInt(date.substring(0, 4));
//        int month = Integer.parseInt(date.substring(4, 6));
//        int day = Integer.parseInt(date.substring(6, 8));
//        if ("M".equals(freq)) {// 月
//            return day;
//        } else if ("Q".equals(freq)) {// 季
//            for (int i = (month - 1) / 3 * 3 + 1; i < month; i++) {
//                Calendar calendar = Calendar.getInstance();
//                calendar.clear();
//                calendar.set(Calendar.YEAR, year);
//                calendar.set(Calendar.MONTH, i - 1);
//                day += calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
//            }
//        } else if ("Y".equals(freq)) {// 年
//            for (int i = 1; i < month; i++) {
//                Calendar calendar = Calendar.getInstance();
//                calendar.clear();
//                calendar.set(Calendar.YEAR, year);
//                calendar.set(Calendar.MONTH, i - 1);
//                day += calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
//            }
//        }
//        return day;
//    }
//
//    /**
//     * 获取当年天数
//     *
//     * @param date 日期
//     * @return int 天数
//     */
//    public static int getCurrentYearDays(String date) {
//        if (date == null || "".equals(date)) {
//            return 1;
//        }
//        int year = Integer.parseInt(date.substring(0, 4));
//        Calendar calendar = Calendar.getInstance();
//        calendar.clear();
//        calendar.set(Calendar.YEAR, year);
//        return calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
//    }
//}
